from itsdangerous import TimedJSONWebSignatureSerializer, BadData
from django.conf import settings


def generate_access_token(openid):
    '''对传入的openid进行加密,返回token'''

    # QQ登录保存用户数据token有效期
    # settings.SECRET_KEY:加密使用的密钥
    # 过期时间:600s=10min
    serializer = TimedJSONWebSignatureSerializer(settings.SECRET_KEY,
                                                 expires_in=600)

    data = {'openid': openid}

    # 对dict进行加密
    token = serializer.dumps(data)

    # 加密完成之后,解码返回
    return token.decode()


def check_access_token(access_token):
    """
    检验传入的token
    :param access_token: token
    :return: openid or None
    """

    # 调用itsdangerous中的类,生成对象
    serializer = TimedJSONWebSignatureSerializer(settings.SECRET_KET,
                                                 expires_in=600)

    try:
        # 尝试使用对象的 loads 函数
        # 对 access_token 进行反序列化( 类似于解密 )
        # 查看是否能够获取到数据:
        data = serializer.loads(access_token)

    except BadData:
        # 如果出错, 则说明 access_token 里面不是我们认可的.
        # 返回 None
        return None
    else:
        # 如果能够从中获取 data, 则把 data 中的 openid 返回
        return data.get('openid')
